/**
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructura de Datos
 * Autor: Rodrigo Avelar; carné: 11192
 */

public class Nodo <E> implements Comparable {
    
    //Atributos
    private E caracter;
    private int frecuencia;
    private String codigo;
    
    /**
     * post: asigna al nodo un caracter y una frecuencia
     * @param caracter
     * @param frecuencia 
     */
    public Nodo(E caracter, int frecuencia){
        this.caracter = caracter;
        this.frecuencia = frecuencia;
    }
    
    /**
     * post: asigna una frecuencia a un nodo vacio
     * @param frecuencia 
     */
    public Nodo(int frecuencia){
        caracter = null;
        this.frecuencia = frecuencia;
    }

    /**
     * pre: existe un nodo
     * post: retorna el caracter almacenado en el nodo
     * @return caracter
     */
    public E getCaracter() {
        return caracter;
    }

    /**
     * pre: existe un nodo
     * post: asigna un caracter al nodo
     * @param caracter 
     */
    public void setCaracter(E caracter) {
        this.caracter = caracter;
    }

    /**
     * pre: existe un nodo
     * post: devuelve la frecuencia del nodo
     * @return frecuencia
     */
    public int getFrecuencia() {
        return frecuencia;
    }

    /**
     * pre: existe un nodo
     * post: asigna un valor para la frecuencia
     * @param frecuencia 
     */
    public void setFrecuencia(int frecuencia) {
        this.frecuencia = frecuencia;
    }

    /**
     * pre: existe el nodo
     * post: retorna el codigo de identicacion del nodo
     * @return codigo 
     */
    public String getCodigo() {
        return codigo;
    }

    /**
     * pre: existe el nodo
     * post: asigna el codigo de identicacion del nodo
     * @param codigo 
     */
    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    /**
     * post: compara valores de frecuencia para el nodo y un objeto 
     * @param o
     * @return 
     */
    @Override
    public int compareTo(Object o) {
        if(frecuencia < ((Nodo)o).getFrecuencia()){
            return -1;
        }
        else{
            return 1;
        }
    }
    
}
